<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //构造函数：根据对象的属性，创建对象，动态给添加属性，返回这个对象。
        function Hero(name, age, sex, level){
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

          //  console.log(123);
          this.sing = function (address) {
            console.log("来" + address + "开演唱会");
          }
       //   console.log(this);
        }
//通过构造函数，创建一个对象

let lvbu = new Hero("吕布", 22, true, 18);
let zf = new Hero("张飞",18, true, 22);
console.log(typeof lvbu);
console.log(lvbu.name);
lvbu.sing("郑州");
/* 
构造函数：
1.作用，创建对象。
2.返回值是一个对象，默认省略
3.封装的代码是，给对象多态的添加属性和方法
4.this 是当前对象
5.函数名用大驼峰
6.配合关键字 new 使用
7.构造函数和类是一码事
8.就是对象公共属性和方法的抽取，
9.属性名和形参尽量保持一致，可读性强。

约定大于规范，规范大于编码
 */
    </script>
</body>
</html>